/**
* @description 全局公共方法
*/
import { isFunction, isObject, isArray, isString } from '@/utils/is.js'

// 字符逗号切割
export const splitRetuen = function(str){
	if(!str || !isString(str)){
		return []
	}else{
		return str.split(',')
	}
}

/**
 * @description 深度克隆
 * @param obj 克隆对象
 * @returns _obj 经过克隆之后的对象
 */
 export const cloneDeep = function(obj) {
  // 常见的非值直接返回
  if ([null, undefined, NaN, false].includes(obj)) return obj
  // 原始类型直接返回
  if (!isFunction(obj) && !isObject(obj)) return obj
  const o = isArray(obj) ? [] : {}
  for (const key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      o[key] = isObject(obj[key]) ? cloneDeep(obj[key]) : obj[key]
    }
  }
  return o
}

/**
* @description 序列化对象参数
* @param { Object } obj
* @returns { String } str
*/
export const setObjToString = function(obj) {
  if (Object.keys(obj).length <= 0) return ''
  let parameters = ''
  for (const key in obj) {
    parameters += key + '=' + encodeURIComponent(obj[key]) + '&'
  }
  parameters = parameters.replace(/&$/, '')
  return '?' + parameters
}


/**
 * @description 反序列化
 * @param {string} url
 * @returns {Object}
 */
 export const param2Obj = function(url) {
  const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
  if (!search) {
    return {}
  }
  const obj = {}
  const searchArr = search.split('&')
  searchArr.forEach(v => {
    const index = v.indexOf('=')
    if (index !== -1) {
      const name = v.substring(0, index)
      const val = v.substring(index + 1, v.length)
      obj[name] = val
    }
  })
  return obj
}

/**
 * @description: 手机号隐私保护 隐藏中间四位数字
 * @param mobile
 * @returns { String }
 */
export function secrecyMobile(mobile) {
	mobile = String(mobile)
    if (!/\d{11}/.test(mobile)) {
        return mobile
    }
    return mobile.replace(/(\d{3})(\d{4})(\d{4})/, '$1****$3')
}

// 获取路径名称 suffix 是否需要后缀
export function getFilename(url, suffix = true) {
  url = url.replace(/(\?|#)[^'"]*/, '');
  let filename = url.substring(url.lastIndexOf('/') + 1);
  return suffix ? filename : filename.substring(0, filename.lastIndexOf('.'));
}